/**
 * Copyright 1996 self.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 * 	The greatest achievement is selflessness. The greatest worth is self-mastery.
 * 	The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 * 	The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 * 	The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 * 	The greatest goodness is a peaceful mind. The greatest patience is humility.
 * 	The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 * 	The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 *
 * @author Ashin Wimalajeewa
 *
 * Note, this is a very old runtime library that I have evolved since 1996. I rarely use it
 * now because the Apache Commons project has made it obsolete.
 */
package self.util;

import java.util.*;

public class FifoList extends AbstractList {
  private int maxSize;
  private ArrayList store = new ArrayList();
  
  public FifoList( int maxSize ) {
    this.maxSize = maxSize;
  }
  
  public int maxSize() {
    return maxSize;
  }
  
//  public boolean addAll(Collection c) {
//    boolean modified = false;
//    Iterator e = c.iterator();
//    while (e.hasNext()) {
//      if ( store.size() >= maxSize )
//        break;
//      if ( add(e.next()) ) 
//        modified = true;
//    }
//    return modified;
//  }
  
  public void add( int index, Object element ) {
    store.add( index, element );
    if ( store.size() > maxSize ) 
      store.remove( 0 );
  }
  
  public Object get( int index ) {
    return store.get( index );
  }
  
  public Object set(int index, Object element) {
    return store.set( index, element );
  }
  
  public Object remove(int index) {
    return store.remove( index );
  }
  
  public int size() {
    return store.size();
  }
  
//  public static void main(String[] args){
//    List tst = new FifoList( 20 );
//    for ( int cntr = 0; cntr < 40; cntr++ ) 
//      tst.add( new Integer(cntr) );
//    System.out.println( tst  );
//    
//    List tst2 = new ArrayList();
//    tst2.add( "one" );
//    tst2.add( "two" );
//    tst2.add( "three" );
//    tst2.add( "four" );
//    tst2.add( "five" );
//    tst2.add( "six" );
//    tst2.add( "seven" );
//    tst2.add( "eight" );
//    tst2.add( "nine" );
//    
//    tst.remove( new Integer(19) );
//    tst.remove( new Integer(30) );
//    tst.remove( new Integer(38) );
//    
//    tst.addAll( tst2 );
//    System.out.println( tst  );
//  }
} 